<?php
 
/*
* File: SimpleImage.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 08/11/06
* Link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
*
* Updated by: C4 aka Serg de Adelantado
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*
*/
 
class SimpleImage 
{ 
	var $image;
	var $image_type;
 
	function load($filename) 
	{
		$image_info = getimagesize($filename);
		$this->image_type = $image_info[2];
		
		if( $this->image_type == IMAGETYPE_JPEG ) 
		{ 
			$this->image = imagecreatefromjpeg($filename);
		} 
		elseif( $this->image_type == IMAGETYPE_GIF ) 
		{
			$this->image = imagecreatefromgif($filename);
		} 
		elseif( $this->image_type == IMAGETYPE_PNG ) 
		{
			$this->image = imagecreatefrompng($filename);
		}
	}
	function save($filename, $image_type=IMAGETYPE_JPEG, $compression=75, $permissions=null) 
	{
		if( $image_type == IMAGETYPE_JPEG ) 
		{
			imagejpeg($this->image, $filename, $compression);
		} 
		elseif( $image_type == IMAGETYPE_GIF ) 
		{
			imagegif($this->image, $filename);
		} 
		elseif( $image_type == IMAGETYPE_PNG ) 
		{
			imagepng($this->image, $filename);
		}
		if($permissions != null) 
		{
			chmod($filename, $permissions);
		}
	}
	function output($image_type=IMAGETYPE_JPEG) 
	{ 
		if( $image_type == IMAGETYPE_JPEG ) 
		{
			imagejpeg($this->image);
		} 
		elseif( $image_type == IMAGETYPE_GIF ) 
		{
			imagegif($this->image);
		} 
		elseif( $image_type == IMAGETYPE_PNG ) 
		{
			imagepng($this->image);
		}
	}
	function getWidth() 
	{ 
		return imagesx($this->image);
	}
	function getHeight() 
	{ 
		return imagesy($this->image);
	}
   
	function resizeToHeight($height) 
	{ 
		$ratio = $height / $this->getHeight();
		$width = $this->getWidth() * $ratio;
		$this->resize($width,$height);
	}

	function resizeToWidth($width) 
	{
		$ratio = $width / $this->getWidth();
		$height = $this->getHeight() * $ratio;
		$this->resize($width,$height);
	}

	function scale($scale) 
	{
		$width = $this->getWidth() * $scale / 100;
		$height = $this->getHeight() * $scale / 100;
		$this->resize($width,$height);
	}
 
	function resize($width, $height) 
	{
		$new_image = imagecreatetruecolor($width, $height);
		imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
		$this->image = $new_image;
	}
   
	function smartResize($size)
	{
		$currentWidth = $this->getWidth();
		$currentHeight = $this->getHeight();
		
		if($currentWidth > $size)
		{
			$ratio = $size / $currentWidth;
			$currentHeight = $currentHeight * $ratio;
			$currentWidth = $size;
		}
		if($currentHeight > $size)
		{
			$ratio = $size / $currentHeight;
			$currentWidth = $currentWidth * $ratio;
			$currentHeight = $size;
		}
		
		$this->resize($currentWidth, $currentHeight);		
	}
	
	function rotate($degrees)
	{
		if(isset($degrees))
		{
			if($degrees != 0)			
			{
				$this->image = imagerotate($this->image, $degrees, 0);
			}
		}
	}
	
	function addWatermark($path)
	{		
		$watermark = imagecreatefrompng($path);		
		$watermark_width = imagesx($watermark);
		$watermark_height = imagesy($watermark);
		$width = $this->getWidth();
		$height = $this->getHeight();		
		$dest_x = $width - $watermark_width - 5;
		$dest_y = 5;//$height - $watermark_height - 5;
		imagealphablending($this->image, true);
		imagealphablending($watermark, true);
		imagecopy($this->image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height);
		imagedestroy($watermark);
	}
	
	function destroyImage()
	{
		imagedestroy($this->image);
	}
}
?>